0. 前言
该笔记记录了Spring Boot的相关基本知识,包括:
- Spring Boot背景、介绍、特点
- Spring Boot的两种配置文件
- Spring Boot的项目结构
- Spring Boot jar包导出相关
1. Spring Boot简介
Spring Boot,Boot中文译为引导。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Boot对Spring应用的开发进行了简化,提供了模块化方式导入依赖的能力,强调了开发RESTful Web服务的功能并提供了生成可运行jar的能力,这一切都清晰地表明在开发可部署的微服务方面Boot框架是一个强大的工具。借助于Boot,让一个RESTful Web工程运行起来是一件很容易的事情;不过,为了了解Boot所有潜在的功能,这篇文章是远远不够的。在企业级基础设施领域,微服务是一种越来越流行的应用架构,因为它能够实现快速开发、更小的代码库、企业级集成以及模块化部署。
本文仅简单介绍Spring Boot,如果想继续深入了解,可以查阅以下网站:
- Spring Boot官网: http://projects.spring.io/spring-boot/
- CSDN - Spring Boot 入门系列
- CSDN - Spring Boot 系列
- CSDN - Spring Boot 实战系列教程
名词介绍 —— 微服务:
“微服务”架构是近期软件应用领域非常热门的概念。微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
2. Spring Boot特点
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成和对XML没有要求配置
3. Spring Boot配置文件
Spring Boot 支持多种内部和外部的配置方式,这里只介绍两种方式的应用配置文件
多种配置方式可以同时使用,但使用时要注意冲突的问题。
3.1 application.properties配置文件
由后缀.properties可知,这是一种java的属性文件,大家都不陌生,使用方式同一般的属性文件, 比如:
application.properties:1
2
3
4spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
3.2 application.yml配置文件
这是一种新的文件格式——yml,配置方式远比xml文件更加灵活。但是,灵活是建立在遵守规定之上的,首先给出一个例子:
application.yml1
2
3
4
5
6
7
8
9
10
11
12server:
port: 8090
session-timeout: 30
tomcat.max-threads: 0
tomcat.uri-encoding: UTF-8
spring:
datasource:
url: jdbc:mysql://localhost:3306/newbirds
username: root
password: mymysql
driverClassName: com.mysql.jdbc.Driver
相信使用过Spring配置文件对此一定不陌生。
注意点:
- key后面的冒号,后面一定要跟一个空格
- 留意缩进格式,缩进长度相同代表同属一个父结点
- 同属一个父结点的结点必须写在一起,不能分开来写,以下是错误例子:
1
2
3
4
5
6
7
8spring:
datasource:
url: jdbc:mysql://localhost:3306/newbirds
username: root
spring:
datasource:
password: mymysql
driverClassName: com.mysql.jdbc.Driver
另外,之后我所使用的是.yml格式的配置。
4. Spring Boot项目结构
我们可以通过SPRING INITIALIZR快速生成一个使用Spring Boot搭建的项目,在myeclipse中导入此项目,这样有助于我们初步认识Spring Boot的实际使用。
项目结构如下所示:
重点:没有web.xml文件
4.1 项目入口
由于简化了配置,配置文件不想以往搭建Spring框架那样有很多,另外,Spring Boot本身内嵌了tomcat容器,其启动的方式同启动普通Java Application一样,运行main方法即可,入口是DemoApplication.java
该项目本身是一个Java Web项目,开了之后当然要关了(也可以使用任务管理器直接杀掉进程javaw.exe)
建议:
由于项目的入口类比较特殊,一般建议是放置在与dao、service、controller同级的目录下,如果放置不当可能会启动失败(找不到注入的组件:dao或service等等),因为默认是是从启动类文件之下的目录来寻找组件进行注入。
4.2 pom.xml文件
观察pom.xml文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> // 打包形式
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent> // 重点,继承了一个父pom.xml
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> // jdk版本声明
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> // 自带maven插件
</plugins>
</build>
容易发现,
- 该pom.xml本身继承了一个Spring Boot的pom.xml文件, 不妨键入看下,可以看到里面自动导入了Spring框架以及其他必要类库的pom,还有一些配置文件、插件的设置,这些都是Spring Boot为我们自动配置的,大可以不管直接用。另外,有另一种形式可以不继承父pom.xml,这里不做介绍。
- 除了在
<parent></parent>
标签中声明了版本号,其他依赖中均没有声明版本,这是因为Spring Boot的父pom.xml中为我们自动配置了,parent标签中的的版本对应的各自依赖的版本。 - 所使用的依赖项极少,而项目是能够正常启动的,这是Spring Boot减少代码量的体现。
- 项目打包默认是jar的形式,而不是war,这也是Spring Boot的特色。
5. Spring Boot项目的导出
说到Spring Boot,不得不提的一个是其本身可以内嵌Tomcat服务器,可以导出一个可运行的jar包,通过运行java命令来运行服务器,下面简单的说明导出步骤:
右键项目 -> run as -> Maven Build… -> 在goals中输入 package 命令 -> Run
在一段控制台的输出后,如果出现Build Success则生成成功
默认在target文件夹中,可以发现生成的jar包, jar包本体是以Maven项目的artifactId为前缀的,后缀为.jar,另一个后缀为.jar.original的其实也是一个jar包,这里就不深究了。
打开控制台(cmd窗口),在配置好Java环境变量的前提下使用Java命令 java -jar <jar包的路径>。比如,我这个项目对应使用命令
java -jar D:\workspace\springboot_demo\target\demo-0.0.1-SNAPSHOT.jar
就可以在命令行中看到项目的启动输出,退出控制台即关闭服务。
6. 总结
Spring Boot目的之一在于简化项目的搭建,加快项目的搭建速度,如果使用默认的配置,我们只需要写一些必要的属性,再搭配上注解,就能在短短进分钟内搭建好项目的框架。不过有时候我们需要使用一些与默认配置有关的bean,这时候就必须写一个配置类,比如使用Druid的监控、Redis的缓存(有机会的话下次说这个)。当出现这种情况,Spring Boot这方面的的优势就不怎么明显了。个人认为,如果足够熟悉以前的Spring风格的xml配置,只是基于加快项目搭建的速度的话,没必要使用Spring Boot
当然,Spring Boot的目的不止在加快效率,对于微服务概念的提出,Spring Boot有着相当重要的地位。
Spring Boot的入门笔记到此,下次记录Spring Boot与各数据库(MySQL、MondoDB、Redis)集成的相关实践。
Copyright © 2018, CSCW back-end Kanarien, All Rights Reserved